package cube.utils;

import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import java.io.File;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.net.URL;

/**
 * 系统工具
 * 
 * @author abiao
 */
public class SystemUtil {

    /**
     * 路径分割符
     */
    private static String SEP = File.separator;

    /**
     * 本类
     */
    private static final Class<?> THIS = SystemUtil.class;

    /**
     * 获取屏幕高度
     */
    public static double getScreenHeight() {
        return Toolkit.getDefaultToolkit().getScreenSize().getHeight();
    }

    /**
     * 获取屏幕宽度
     */
    public static double getScreenWidth() {
        return Toolkit.getDefaultToolkit().getScreenSize().getWidth();
    }

    /**
     * 获取系统可用字体
     */
    public static String[] getFonts() {
        return GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
    }

    /**
     * 当前用户是否具有root权限
     */
    public static boolean isRootUser() {
        return "0".equals(CmdUtil.exec("id -u"));
    }

    /**
     * 获取程序类路径
     */
    public static String getClassPath() {
        URL url = THIS.getClassLoader().getResource("");
        if (url == null) {
            return null;
        }
        String classPath = url.getPath();
        if (isLinux()) {
            return classPath;
        }
        return classPath.substring(1).replace("/", "\\");
    }

    /**
     * 获取程序运行目录
     */
    public static String getRunPath() {
        String runPath = System.getProperty("user.dir");
        return StringUtil.cutTail(runPath, SEP) + SEP;
    }

    /**
     * 获取临时目录位置
     */
    public static String getTempPath() {
        return System.getProperty("java.io.tmpdir");
    }

    /**
     * 判断系统是否为linux系统
     */
    public static boolean isLinux() {
        return System.getProperty("os.name").equalsIgnoreCase("linux");
    }

    /**
     * 获取当前jar程序名称（含路径 ）
     */
    public static String getJarName() {
        String jarfile = THIS.getProtectionDomain().getCodeSource().getLocation().getFile();
        return FileUtil.getFilePath(jarfile);
    }

    /**
     * 获取当前jar程序名称（不含路径 ）
     */
    public static String getJarBaseName() {
        return FileUtil.getBaseName(getJarName());
    }

    /**
     * 获取当前jar程序路径
     */
    public static String getJarPath() {
        return FileUtil.getDirName(getJarName());
    }

    /**
     * 内存可以使用最大值
     */
    public static long getMemMax() {
        return ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax();
    }

    /**
     * 内存已使用
     */
    public static long getMemUsed() {
        return ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed();
    }

    /**
     * 程序运行时间
     */
    public static long getRanTime() {
        long s = ManagementFactory.getRuntimeMXBean().getStartTime();
        return TimeUtil.getTime() - s;
    }

    /**
     * 当前线程数
     */
    public static int getThreadCount() {
        return ManagementFactory.getThreadMXBean().getThreadCount();
    }

    /**
     * 鼠标多击时间间隔
     */
    public static int getMultiClickInterval() {
        return (Integer) Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");
    }

    /**
     * 从Jar包中加载库文件
     */
    public static void loadFromJar(String libName) throws IOException {
        FileUtil.unzip(getJarName(), libName, getTempPath());
        System.load(getTempPath() + FileUtil.SEP + libName);
    }
}
